<?php
/**
 * 后台用户管理类
 * User: 袁吉
 * Date: 2016-7-26
 * Time: 19:33
 */
namespace SDF\Lib\Account;

use MongoDB\BSON\UTCDateTime;
use MongoDB\Driver\WriteConcern;
use SDF\Db\MongoDb;

/**
 * 账户中心，用户管理类
 * @package SDF\Lib\Account
 */
class admin_user extends MongoDb {
    /**
     * 授权构造
     * special_auth constructor.
     */
    public function __construct(){
        parent::__construct('admin_user', 'account');
    }

    /**
     * 更具后台用户登录名获取用户信息
     * @param $username
     * @param array $fields
     * @return array|null
     */
    public function findOneByUsername($username, $fields = array()) {
        return $this->findOne(array('username' => $username), $fields);
    }

    /**
     * 添加后台管理账户
     * @param $userinfo
     * @param array $options
     * @param WriteConcern|NULL $writeConcern
     * @return array
     * @throws \Exception
     */
    public function insertOne(&$userinfo,array $options = [], WriteConcern $writeConcern = NULL) {
        if(empty($userinfo['username'])){
            throw new \Exception('username is null');
        }
        if(!isset($userinfo['mobile'])){
            throw new \Exception('mobile is set');
        }
        if(empty($userinfo['nickname'])){
            throw new \Exception('nickname is null');
        }
        $data = array(
            'mobile' => $userinfo['mobile'],//手机号
            'username' => $userinfo['username'],//唯一登陆名
            'nickname' => $userinfo['nickname'],//昵称
            'password' => '',//密码，默认未设置密码，所以不能使用密码登陆，需要通过其他方式登陆后修改密码。
            'sex' => 0,//性别，1男，2女，0未知。
            'create_time' => new UTCDateTime(),//注册时间
            'last_login_time' => new UTCDateTime(),//最后一次登录时间
            'last_login_ip' => '',//最后一次登录ip
            'status' => 0,//状态，1：在职，0：离职。
            'headimgurl' => '',//头像
            'shop_authority' => [],//店铺授权,空数组表示一个店铺权限也没有，如果是true，表示所有店铺权限。
            'shop_id' => [],//配送店铺
            'band_dingtalk' => [],//绑定的钉钉信息
            'band_qq' => [],//绑定的QQ信息
            'band_wx' => [],//绑定的微信信息
            'sys_authority' => []//系统授权码列表。空数组表示没有任何系统授权
        );
        parent::insertOne($data);
        return $data;
    }

    /**
     * 获取用户列表
     * @param array $where
     * @param string $field 做为键的字段
     * @param string $lev 返回数组的级别
     * @return array
     */
    public function getUser($where = array(),$field="username",$lev = "1") {
        $data = $this->find($where);
        $data_ = array();
        $n = 0;
        foreach ($data as $value) {
            if (isset($value[$field])) {
                if ($lev == 1)
                    $data_[$value[$field] . ""] = $value['nickname'] != "" ? $value['nickname'] : $value['username'];
                else {
                    $data_[$n][$field] = $value[$field]."";
                    $data_[$n]['nickname'] = $value['nickname'] != "" ? $value['nickname'] : $value['username'];
                    $n++;
                }
            }
        }
        return $data_;
    }

    /**
     * 绑定钉钉账户
     * @param $_id
     * @param $DingtalkUserInfo
     * @return \MongoDB\Driver\WriteResult
     * @throws \Exception
     */
    public function bandDingtalk($_id,$DingtalkUserInfo){
        $_id = self::format($_id);
        $ret = $this->updateOne(array(
            '_id'=>$_id,
        ),array(
            '$set'=>array(
                'band_dingtalk'=>$DingtalkUserInfo,
            ),
        ));
        return $ret;
    }

}